// 封装引入请求的地方
import axios from 'axios'
// Toast不是组件，是一个js方法
import { Toast } from 'vant'
// 拿axios的token
import { getToken, removeToken } from '@/utils/storage'
import router from '@/router'
//
const request = axios.create({
  baseURL: 'http://interview-api-t.itheima.net/h5', // 基地址
  timeout: 8000 // 设置请求的时间  超时时间
})
// 拦截的是request
// 添加请求拦截器
request.interceptors.request.use(
  function (config) {
    // 因为像收藏，面经，很多接口都是要token的，写在请求拦截器里
    config.headers.Authorization = `Bearer ${getToken()}`
    // 在发送请求之前做些什么
    return config
  },
  function (error) {
    return Promise.reject(error)
  }
)

// 添加响应拦截器
request.interceptors.response.use(
  function (response) {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    // 返回处理后的数据
    return response.data
  },
  function (error) {
    console.log(error)
    if (error.response.status === 401) {
      // 是401报错，删掉过期的token，销毁掉，跳转到登入页
      removeToken()
      //   路由跳转需要引入router.js的内容
      router.push('./login')
      return
    }
    // 对特殊的错误，判断，强制登入到登入页，删掉过期的token

    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    if (error.response && error.response.data.message) {
      Toast.fail(error.response.data.message)
    }

    console.log(error.response.data.message)
    return Promise.reject(error)
  }
)
// 只有一个文件默认导出
export default request
